#include<bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn=1e6+10;

int dp[100000]; // 提升 i 所需要的最小的精力
int n, m, k;
int a[maxn], b[600], c[600];

bool check(int x){
	int cnt=0;
	for(int i=1;i<=n;i++){
		cnt+=dp[(x-a[i])];
	}
	return cnt<=k;
}

void solve(){
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=m;i++){
		cin>>b[i];
	}
	
	for(int i=1;i<=m;i++){
		cin>>c[i];
	}
	
	memset(dp, 0x3f, sizeof(dp)); // 先设置为最大值
	dp[0]=0; // 不要忘记
	// 获取 dp 数组
	for(int i=1;i<=m;i++){
		for(int j=1;j<=1e4;j++){ // 完全背包
			if(j<b[i]){ // 虽然 j<b[i], 但是我最少需要提升 j 所以也是可以的
				dp[j]=min(dp[j], c[i]);
			} else {
				dp[j]=min(dp[j], dp[j-b[i]]+c[i]);				
			}
		}
	}
	
	int l=1, r=1e4+110;
	while (l<r-1) {
		int md=(l+r)/2;
		if(check(md)){
			l=md;
		}else {
			r=md;
		}
	}
	cout<<l<<'\n';
}


signed main(){
	ios::sync_with_stdio(0), cin.tie(0),cout.tie(0);
	solve();
	return 0;
}
